package cn.itcast.nems.journal.service;

import cn.itcast.nems.common.PageQueryModel;
import cn.itcast.nems.journal.dto.JournalClazzDTO;
import cn.itcast.nems.journal.dto.JournalRenewalDTO;
import cn.itcast.nems.journal.dto.JournalRenewalModel;
import cn.itcast.nems.studentrecord.bo.JournalClazzModel;
import cn.itcast.nems.studentrecord.dao.dataobject.JournalRenewalDO;
import cn.itcast.nems.studentrecord.dao.dataobject.JournalRenewalLineDiscountDO;
import cn.itcast.nems.studentrecord.dao.entity.JournalRenewal;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
/**
 * <p>
 * 升级凭单业务接口
 * </p>
 *
 * @author zhouwei
 * @since 2023/12/8 2:28 PM
 **/
public interface JournalRenewalService extends IService<JournalRenewal> {

    // void testFinish(String formId) ;

    /**
     * 分页查询 升级凭单
     * @param queryModel 参数对象
     * @return 分页数据
     */
    IPage<JournalRenewalDO> findPageList(PageQueryModel<JournalRenewalModel> queryModel) ;

    /**
     * 新增 升级凭单
     * @param renewalDTO 表单对象
     **/
    JournalRenewalDTO create(JournalRenewalDTO renewalDTO) ;
    /**
     * 提交
     * @param renewalDTO 表单对象
     **/
    JournalRenewalDTO flow(JournalRenewalDTO renewalDTO) ;
    /**
     * 提交
     * @param id  升级凭单ID
     **/
    JournalRenewalDTO flow(String id) ;

    /**
     * 根据ID 查询 升级凭单详情
     * @param id 升级凭单头ID
     * @return 升级凭单详情
     */
    JournalRenewalDTO findById (String id ) ;

    /**
     * 根据ID 删除 升级凭单
     * @param id 升级凭单头ID
     */
    void deleteById (String id ) ;

    /**
     * 撤销升级凭单
     * @param id 升级凭单ID
     */
    void cancel(String id) ;


    /**
     * 根据学籍ID查询优惠项列表
     * @param renewalId 升级凭单ID
     * @param recordId 学籍ID
     * @return 优惠项
     */
    List<JournalRenewalLineDiscountDO> findDiscountsByRenewalIdAndRecordId (String renewalId,String recordId) ;

    /**
     * 查询升级凭单涉及的目标班级
     * @param queryModel
     * @return
     */
    cn.itcast.ic.common.bean.Page<JournalClazzDTO> findClazzList4PageSearch(PageQueryModel<JournalClazzModel> queryModel)  ;
}
